home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / elk-2_0.lha / elk-2.0 / src / feature.c < prev    next >
C/C++ Source or Header  |  1992-03-17  |  971b  |  43 lines

  1. /* provide, require, feature?
  2.  */
  3.  
  4. #include "scheme.h"
  5.  
  6. static Object Features;
  7.  
  8. Init_Features () {
  9.     Features = Null;
  10.     Global_GC_Link (Features);
  11. }
  12.  
  13. Object P_Featurep (sym) Object sym; {
  14.     Check_Type (sym, T_Symbol);
  15.     return Truep (P_Memq (sym, Features)) ? True : False;
  16. }
  17.  
  18. Object P_Provide (sym) Object sym; {
  19.     Check_Type (sym, T_Symbol);
  20.     Features = Cons (sym, Features);
  21.     return Void;
  22. }
  23.  
  24. Object P_Require (argc, argv) Object *argv; {
  25.     Object sym, a[1];
  26.     GC_Node;
  27.  
  28.     sym = argv[0];
  29.     GC_Link (sym);
  30.     if (!Truep (P_Featurep (sym))) {
  31.     a[0] = argc == 1 ? sym : argv[1];
  32.     if (argc == 3)
  33.         Check_Type (argv[2], T_Environment);
  34.     if (Truep (Var_Get (V_Autoload_Notifyp)))
  35.         Format (Standard_Output_Port, "[Autoloading ~s]~%", 18, 1, a);
  36.     (void)General_Load (a[0], argc == 3 ? argv[2] : The_Environment);
  37.     if (!Truep (P_Featurep (sym)))
  38.         Primitive_Error ("feature ~s was not provided", sym);
  39.     }
  40.     GC_Unlink;
  41.     return Void;
  42. }
  43.